# encoding: utf-8
# Author    : limusen
# Datetime  : 2021/12/15 8:56 下午


import pymysql
from common.config_utils import local_config
from common.logs_utils import logger


class MysqlUtils:

    def __init__(self):
        self.connect_obj = pymysql.connect(
            host="mysql.yaoweilai.cn",
            port=3306,
            user="root",
            password="123456",
            database="yaoweilai_common",
            charset="utf8"
        )
        self.cursor = self.connect_obj.cursor(cursor=pymysql.cursors.DictCursor)

    def get_sql_one(self, sql):
        # 定义游标对象及数据变量
        data = None
        try:
            # 执行sql
            self.cursor.execute(sql)
            # 获取结果
            data = self.cursor.fetchone()
        except Exception as e:
            logger.error("读取数据库报错:[%s]" % e.__str__())
        finally:
            # 关闭游标和连接
            self.close_cursor()
            self.close_conn()
            # 返回执行结果
            return data

    def get_sql_all(self, sql):
        # 定义游标对象及数据变量
        data = None
        try:
            # 执行sql
            self.cursor.execute(sql)
            # 获取结果
            data = self.cursor.fetchall()
        except Exception as e:
            logger.error("读取数据库报错:[%s]" % e.__str__())
        finally:
            # 关闭游标和连接
            self.close_cursor()
            self.close_conn()
            # 返回执行结果
            return data

    # 修改、删除、新增
    def update_sql(self, sql):
        # 定义游标对象及数据变量
        try:
            # 调用执行方法
            self.cursor.execute(sql)
            # 提交事务
            self.cursor.commit()
        except Exception as e:
            # 事务回滚
            self.cursor.rollback()
            logger.error("读取数据库报错:[%s],当前正在进行回滚操作" % e.__str__())
        finally:
            # 关闭游标对象
            self.close_cursor()
            self.close_conn()

    def close_cursor(self):
        """
        关闭游标连接
        :return:
        """
        if self.cursor:
            self.cursor.close()
            # 注意：关闭连接对象后，对象还存在内存中，需要手工设置为None
            self.cursor = None

    def close_conn(self):
        """
        关闭数据库连接对象
        :return:
        """
        if self.connect_obj:
            self.connect_obj.close()
            self.connect_obj = None

mysql_result = MysqlUtils()

if __name__ == '__main__':
    mysql_result = MysqlUtils()
    # print(mysql_result.get('*', 'user', 2))
    print(mysql_result.get_sql_one("select * from yaoweilai_video.information limit 3;"))
